<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    <title>jouyouyun&#39;s blog</title>
    <meta name="viewport" content="width=device-width,minimum-scale=1">
    <meta name="description" content="jouyouyun&#39;s blog.">
    <meta name="generator" content="Hugo 0.105.0">
    
    
    
    
      <meta name="robots" content="noindex, nofollow">
    

    
<link rel="stylesheet" href="/ananke/css/main.min.css" >



    
    
    
      

    

    
    
      <link href="/categories/index.xml" rel="alternate" type="application/rss+xml" title="jouyouyun&#39;s blog" />
      <link href="/categories/index.xml" rel="feed" type="application/rss+xml" title="jouyouyun&#39;s blog" />
      
    
    
    <meta property="og:title" content="Categories" />
<meta property="og:description" content="jouyouyun&#39;s blog." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jouyouyun.github.io/categories/" />

<meta itemprop="name" content="Categories">
<meta itemprop="description" content="jouyouyun&#39;s blog."><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Categories"/>
<meta name="twitter:description" content="jouyouyun&#39;s blog."/>

	
  </head>

  <body class="ma0 avenir bg-near-white">

    

  <header>
    <div class="pb3-m pb6-l bg-black">
      <nav class="pv3 ph3 ph4-ns" role="navigation">
  <div class="flex-l justify-between items-center center">
    <a href="/" class="f3 fw2 hover-white no-underline white-90 dib">
      
        jouyouyun&#39;s blog
      
    </a>
    <div class="flex-l items-center">
      

      
        <ul class="pl0 mr3">
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/post/" title="Archives 页">
              Archives
            </a>
          </li>
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/tags/" title="Tags 页">
              Tags
            </a>
          </li>
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/categories/" title="Categories 页">
              Categories
            </a>
          </li>
          
        </ul>
      
      
<div class="ananke-socials">
  
    <a href="https://github.com/jouyouyun" target="_blank" class="github ananke-social-link link-transition stackoverflow link dib z-999 pt3 pt0-l mr1" title="GitHub link" rel="noopener" aria-label="follow on GitHub——Opens in a new window">
      
        <span class="icon"><svg style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>
</span>
      
<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;"/>
</svg>
</span></a>
  
</div>

    </div>
  </div>
</nav>

      <div class="tc-l pv3 ph3 ph4-ns">
        <h1 class="f2 f-subheadline-l fw2 light-silver mb0 lh-title">
          Categories
        </h1>
        
      </div>
    </div>
  </header>


    <main class="pb7" role="main">
      
    
  <article class="cf pa3 pa4-m pa4-l">
    <div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links mid-gray">
      
    </div>
  </article>
  <div class="mw8 center">
    <section class="ph4">
      
        <h2 class="f1">
          <a href="/categories/blog" class="link blue hover-black">
            Category: blog
          </a>
        </h2>
        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 25, 2021
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/audit-usage/" class="link black dim">
        audit 简单使用
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>audit</code> 是 <code>linux</code> 下的审计系统，包含内核模块和系统服务。可使用 <code>audit</code> 对文件变更、系统调用、任务创建、用户事件等进行审计。</p>
<p>可使用 <code>sudo auditctl -s</code> 获取内核审计模块的状态，可使用 <code>sudo systemctl status auditd</code> 获取审计服务的状态。在添加规则之前，需要确保审计内核模块和审计服务正常。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十月 25, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/touchscreen-calibration/" class="link black dim">
        触摸屏校正
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>有些设备的触摸屏不准，需要校正后才能正常使用。校正实际上就是配置设备在 <code>Xorg</code> 中的属性，具体属性名与驱动相关，后文描述。</p>
<p>下面开始介绍校正方法：</p>
<h2 id="准备">准备</h2>
<p>安装需要用到的工具：</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 6, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-kernel-compile/" class="link black dim">
        Compile Kernel
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近由于要调试 <code>usbhid</code> 模块，所以需要编译 <code>kernel</code> ，在此整理下方法，以免每次都查找。</p>
<h2 id="dependencies">Dependencies</h2>
<ul>
<li>
<p><code>deepin</code></p>
<p><code>sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev</code></p>
</li>
<li>
<p><code>archlinux</code></p>
<p><code>sudo pacman -S gcc ncurses bison flex openssl libelf elfutils</code></p>
</li>
</ul>
<p>若编译时有报错，请按照错误提示按照缺失的依赖。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 3, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/gsettings/" class="link black dim">
        GSettings
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>GSettings</code> 实际上是一套可使用多个 <code>storage backends</code> 的 <code>API</code> ，默认使用 <code>dconf</code> 作为 <code>backend</code> ，也可以使用 <code>keyfile</code> 作为 <code>backend</code> 。但由于 <code>gio</code> 提供了 <code>GKeyFile</code> 结构来处理 <code>keyfile</code> 文件，所以解析 <code>keyfile</code> 文件时很少通过 <code>GSettings API</code> ，在这里只介绍使用 <code>dconf</code> 作为 <code>backend</code> 的使用方法。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        五月 8, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux_hardware_info/" class="link black dim">
        Linux 硬件信息获取
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在 <code>linux</code> 上可以通过 <code>dmidecode</code> 或是 <code>lshw</code> 来获取硬件信息，能够方便的查看系统配置。但它们的输出信息过多，解析起来有些麻烦，另外 <code>lshw</code> 对 <code>usb</code> 接口的网卡支持不好，显示的信息不够，所以在此整理下通过读文件或是一些简单命令来获取硬件信息的方法。</p>
<h3 id="dmi"><strong>DMI</strong></h3>
<p>一般情况下内核默认加载了 <code>dmi sysfs</code> ，路径是 <code>/sys/class/dmi</code> 。里面包含了 <code>bios</code> ， <code>board</code> ， <code>product</code> 等信息。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 21, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/jenkins-api-usage/" class="link black dim">
        Jenkins API 使用
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Jenkins</code> 是一款流行的开源持续集成工具，可以用来做一些软件开发的自动化工作，如打包，测试，自动部署等。</p>
<p><code>Jenkins</code> 中有 <code>view</code> 和 <code>job</code> 的概念， <code>view</code> 相当于组， <code>job</code> 则是具体的任务。
<code>view</code> 下面可以创建 <code>job</code> ，但 <code>job</code> 可以不在任何 <code>view</code> 下。</p>
<p>这里主要介绍 <code>Jenkins</code> 提供的 <code>HTTP API</code> ，至于如何使用 <code>Jenkins</code> 请参看 <a href="https://jenkins.io/doc/">Jenkins User Documentation</a>。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 21, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/docker-data-storage/" class="link black dim">
        更改 Docker 数据的存储目录
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Docker</code> 安装后默认将数据存储在 <code>/var/lib/docker</code> 下，随着 <code>image</code> 和 <code>container</code> 的增多，会导致 <code>/</code> 分区的空间被用完，如果 <code>/</code> 分区特别大就请忽略这篇文章。</p>
<p>因此需要将一些软件的数据存储到空间大的分区，与 <code>/</code> 分区分开。不仅 <code>Docker</code> 需要这样处理，如 <code>mysql/postgresql</code> 等软件也需要这样处理。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 21, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/docker-intro/" class="link black dim">
        Docker 使用简介
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Docker</code> 是使用 <code>GoLang</code> 开发的开源容器引擎，可以方便的打包开发好的应用，然后分发到任意 <code>linux</code> 主机上。</p>
<p>与传统的虚拟机相比拥有以下优势：</p>
<ul>
<li>
<p>高效的系统资源利用率</p>
<p>由于不需要进行硬件虚拟和运行完整的操作系统等额外开销，无论是应用执行速度、内存损耗或者文件存储速度， <code>Docker</code> 都更加高效</p>
</li>
<li>
<p>更快的启动速度</p>
<p><code>Docker</code> 容器应用直接运行与宿主内核，无需启动完整的操作系统，可以做到秒级启动</p>
</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 13, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/influxdb-introduction/" class="link black dim">
        InfluxDB 简介
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>InfluxDB</code> 是一个时间序列数据库(<code>TSDB</code>), 被设计用来处理高写入、高查询负载，是 <a href="https://www.influxdata.com/time-series-platform/">TICK</a> 的一部分。</p>
<p><code>TSDB</code> 是针对时间戳或时间序列数据进行优化的数据库，专门为处理带有时间戳的度量和事件或度量而构建的。
而时间序列数据可以是随时间跟踪、监视、下采样和聚合的度量或事件，如服务器指标、应用程序性能、网络数据、传感器数据以及许多其他类型的分析数据。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 11, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/clean_invalid_branch_in_git/" class="link black dim">
        清理无用的 local branch
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在开发新功能或修复 <code>bug</code> 时, 会从 <code>master</code> 上新建 <code>branch</code> 来处理, 当完成后会将这个 <code>branch</code> 推送到 <code>origin</code> 中, 如:
<code>git push origin &lt;branch name&gt;:&lt;branch name&gt;</code>.</p>
<p><code>origin</code> 审核代码没有问题后就会 <strong>合并分支并删除</strong>, 但 <strong>本地</strong> 在 <code>git pull</code> 删除本地分支后, 仍能通过 <code>git branch -a</code> 看到这个 <code>branch</code> 的 <code>origin ref</code>.
日积月累之下本地就会有很多这样无用的 <code>branch ref</code>, 很是让人厌烦, 遂在此记录清理的方法.</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 5, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/mysql_commands/" class="link black dim">
        MySQL 常用命令
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>大学学的数据库系统概论工作后几年没有使用都已忘了, 现在项目需要用到数据库, 但来不及细看相关书籍了, 遂将一些常用的记录下来.</p>
<h2 id="常用类型">常用类型</h2>
<p><code>MySQL</code> 支持多种类型, 大致可以分为三类: 数值, 日期/时间和字符串(字符)类型, 大致如下:</p>
<ul>
<li>
<p>数值类型</p>
<ul>
<li>整数: <code>tinyint</code>, <code>smallint</code>, <code>mediumint</code>, <code>int</code>, <code>bigint</code></li>
<li>浮点数: <code>float</code>, <code>double</code>, <code>decimal</code></li>
</ul>
</li>
<li>
<p>日期和时间</p>
<p><code>date</code>, <code>time</code>, <code>datetime</code>, <code>timestamp</code>, <code>year</code></p>
</li>
<li>
<p>字符串类型</p>
<ul>
<li>字符串: <code>char</code>, <code>varchar</code></li>
<li>文本: <code>tinytext</code>, <code>text</code>, <code>mediumtext</code>, <code>longtext</code></li>
<li>二进制字符串: <code>tinyblob</code>, <code>blob</code>, <code>mediumblob</code>, <code>longblob</code></li>
</ul>
</li>
</ul>
<p>下面将详细给出每种类型的大小和描述.</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        二月 2, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/hugo-github/" class="link black dim">
        使用 hugo 写博客
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><a href="https://github.com/gohugoio/hugo">hugo</a> 是由 <code>Go</code> 语言实现的静态网站生成器, 简单、易用、高效、易扩展、快速部署。</p>
<h2 id="安装">安装</h2>
<p>到 <a href="https://github.com/gohugoio/hugo/releases">Release</a> 下载对应系统的二进制文件压缩包, 然后解压, 并把得到的二进制复制到 <code>Path</code> 中.</p>
<h2 id="简单使用">简单使用</h2>
<h3 id="创建一个站点">创建一个站点</h3>
<p>使用命令 <code>hugo new site &lt;dir&gt;</code> 来创建站点, 创建后的结构如下:</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 5, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/gorm-association/" class="link black dim">
        gorm 关联查询
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>定义了一个 <code>User</code> 和 <code>Company</code>, <code>User</code> 中可以包含多个 <code>Company</code>, 如下:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#66d9ef">type</span> <span style="color:#a6e22e">User</span> <span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">ID</span>        <span style="color:#66d9ef">int</span>        <span style="color:#e6db74">`gorm:&#34;TYPE:int(11);NOT NULL;PRIMARY_KEY;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Name</span>      <span style="color:#66d9ef">string</span>     <span style="color:#e6db74">`gorm:&#34;TYPE: VARCHAR(255); DEFAULT:&#39;&#39;;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Companies</span> []<span style="color:#a6e22e">Company</span>  <span style="color:#e6db74">`gorm:&#34;FOREIGNKEY:UserId;ASSOCIATION_FOREIGNKEY:ID&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">CreatedAt</span> <span style="color:#a6e22e">time</span>.<span style="color:#a6e22e">Time</span>  <span style="color:#e6db74">`gorm:&#34;TYPE:DATETIME&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">UpdatedAt</span> <span style="color:#a6e22e">time</span>.<span style="color:#a6e22e">Time</span>  <span style="color:#e6db74">`gorm:&#34;TYPE:DATETIME&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">DeletedAt</span> <span style="color:#f92672">*</span><span style="color:#a6e22e">time</span>.<span style="color:#a6e22e">Time</span> <span style="color:#e6db74">`gorm:&#34;TYPE:DATETIME;DEFAULT:NULL&#34;`</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">type</span> <span style="color:#a6e22e">Company</span> <span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">gorm</span>.<span style="color:#a6e22e">Model</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Industry</span> <span style="color:#66d9ef">int</span>    <span style="color:#e6db74">`gorm:&#34;TYPE:INT(11);DEFAULT:0&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Name</span>     <span style="color:#66d9ef">string</span> <span style="color:#e6db74">`gorm:&#34;TYPE:VARCHAR(255);DEFAULT:&#39;&#39;;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Job</span>      <span style="color:#66d9ef">string</span> <span style="color:#e6db74">`gorm:&#34;TYPE:VARCHAR(255);DEFAULT:&#39;&#39;&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">UserId</span>   <span style="color:#66d9ef">int</span>    <span style="color:#e6db74">`gorm:&#34;TYPE:int(11);NOT NULL;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 7, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/how-to-solved-origin-changed-apt-error/" class="link black dim">
        怎么处理 &#39;Origin&#39;值从&#39;Google, Inc.&#39;修改到了&#39;Google LLC&#39; 的 APT 错误
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>今天在执行 <code>sudo apt-get update</code> 出现了下面的错误提示：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>E: 仓库<span style="color:#e6db74">&#39;http://dl.google.com/linux/chrome/deb stable Release&#39;</span>将其<span style="color:#e6db74">&#39;Origin&#39;</span>值从<span style="color:#e6db74">&#39;Google, Inc.&#39;</span>修改到了<span style="color:#e6db74">&#39;Google LLC&#39;</span>
</span></span><span style="display:flex;"><span>N: 为了让这个仓库能够应用，这必须在更新之前显式接受。更多细节请参阅 apt-secure<span style="color:#f92672">(</span>8<span style="color:#f92672">)</span> 手册。
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 英语环境下的输出</span>
</span></span><span style="display:flex;"><span>E: Repository ‘http://dl.google.com/linux/chrome-remote-desktop/deb stable Release’ changed its ‘Origin’ value from ‘Google, Inc.’ to ‘Google LLC’
</span></span><span style="display:flex;"><span>N: This must be accepted explicitly before updates <span style="color:#66d9ef">for</span> this repository can be applied. See apt-secure<span style="color:#f92672">(</span>8<span style="color:#f92672">)</span> manpage <span style="color:#66d9ef">for</span> details.
</span></span></code></pre></div><p>这个错误导致无法升级系统，错误说明了原因：是由于 <code>Google Chrome</code> 的 <code>Origin</code> 改变引起的，也给出了解决思路：手动接受这个改变。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十月 23, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/set-appearance-in-deepin-or-gnome/" class="link black dim">
        linux 下 deepin 和 gnome 桌面的外观设置
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>桌面的外观设置一般包括窗口主题、图标主题、光标主题和字体设置，其中窗口主题就是常见的 <code>gtk</code> 主题，字体设置又包括标准字体、等款字体和字体大小。对于进些年的高分屏，又添加了字体缩放和窗口缩放这2个选项。</p>
<p>界面上设置方法就不介绍了，都可以在各自桌面的控制中心中找到，这里主要介绍命令行下的。</p>
<p><code>deepin</code> 和 <code>gnome</code> 桌面环境的外观配置数据是使用 <code>gsettings</code> 来存储，所以可以通过 <code>gsettings</code> 来设置和读取。 <code>gsettings</code> 相比设置界面就是 可以设置到更多的选项，设置的值更加精确。</p>
<p>下面先简单介绍下 <code>gsettings</code> 的用法。</p>
<h2 id="gsettings"><code>GSettings</code></h2>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十月 21, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-auto-suspend/" class="link black dim">
        Linux 休眠自动唤醒
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近做无线网络在系统多次休眠唤醒后是否正常的测试，但每次休眠后都需要手动点击键盘来唤醒系统，显而易见的这种方法需要人来值守，很不放便。</p>
<p>此时便想是否有做自动唤醒的程序，毕竟这种需求也挺正常的，应该有人已经做过了。因此就开始查找自动唤醒的方法，果然就发现了 <code>rtcwake</code> 这个程序，这个程序是让系统进入休眠模式并在指定的时间后唤醒。立刻便觉得这个程序很神奇，然后就去看它的源码来找出它的实现方式，这边发现了本文的主题 <code>RTC</code> 子系统。</p>
<h2 id="rtc-子系统"><code>RTC</code> 子系统</h2>
<p><code>RTC</code> 子系统在目录 <code>/sys/class/rtc/</code> 下，会根据设备创建对应的目录，需要在内核中开启支持，配置如下：</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 27, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-time-standard/" class="link black dim">
        Linux 时间标准
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="系统如何设置时间">系统如何设置时间</h2>
<ol>
<li>开机时根据硬件时钟来设置系统时钟.</li>
<li>如果开启了 <code>NTP</code> 服务, 会根据网络时间来校正系统时钟，确保时间准确.</li>
<li>关机时会根据系统时钟来设置硬件时钟(<code>localtime</code> 标准除外).</li>
</ol>
<h3 id="时钟">时钟</h3>
<ul>
<li>硬件时钟: 即实时时钟 <code>RTC</code> 或 <code>CMOS</code> 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.</li>
<li>系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 <code>/etc/adjtime</code> 的设置.</li>
<li><code>/etc/adjtime</code>: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 27, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/fixed-superblock/" class="link black dim">
        修复 superblock
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>本周去某公司调试系统，他们硬件测试部分送来了一台系统无法进入的机器，他们也不知道怎么弄得，让我看下是系统原因还是 <code>SSD</code> 硬件有问题。</p>
<p>拿到机器开机后，没有正常的进入系统，直接进入了 <code>initramfs mode</code> 并有 <code>filesystem invalid superblock checksum error</code> 的错误提示，遂告诉他们是系统的 <code>filesystem</code> 挂了，然后开始查找修复方法，最后找到了方法并修复了机器，在此记录一下。</p>
<h2 id="修复方法">修复方法</h2>
<p>下面的命令都是在 <code>initramfs shell</code> 中执行的。</p>
<h3 id="先确定你系统所在的分区">先确定你系统所在的分区</h3>
<p>可以执行 <code>lsblk</code> 来查看分区信息，然后确定，假如是 <code>/dev/sdaX</code></p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        五月 10, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/restful-introduction/" class="link black dim">
        RESTful 简介
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="简介">简介</h2>
<p><code>RESTful</code> 即表现层状态转换，是一种设计风格，不是标准。其要点如下：</p>
<ul>
<li>
<p>资源由 <code>URI</code> 来指定</p>
<p>每个资源都有与之对应的 <code>URI=，一个 =URI</code> 只能对应一种资源，但一种资源可以对应多个 <code>URI</code> 不同的分类方法)。</p>
</li>
<li>
<p>对资源的操作对应到 <code>HTTP</code> 协议提供的方法</p>
<p>如增删改查等操作，对应 <code>HTTP</code> 协议的 <code>POST, DELETE, PUT, GET</code> 等方法</p>
</li>
<li>
<p>资源的表现形式通常广泛流行的协议和标准</p>
<p>如 <code>JSON, XML, HTML</code> 等格式，当然也可以是其它格式或者私有格式，但一定足够能描述自己</p>
</li>
<li>
<p>通过操作资源的表现形式来操作资源</p>
<p>通过修改表现形式再辅以 <code>HTTP</code> 协议的方法，应用就可以管理资源</p>
</li>
<li>
<p>以超媒体作为应用状态的引擎</p>
<p>资源相关操作的 <code>URI</code> 可附加在表现形式内，应用根据自身状态选择相应的 <code>URI</code> 来更改状态。</p>
<p>操作可以是 <code>URI</code> 外，也可以是一段代码，让应用执行。</p>
</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 12, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/git-rebase/" class="link black dim">
        Git Rebase 回退
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在开发新功能或修复 <code>bug</code> 时，一般需要新建一个分支，然后在它之上进行开发。在多人协同开发时，经常会同时修改相同的分支或相同的文件，这时就需要进行 <code>rebase</code> 操作在提交你的代码之前。</p>
<p>但有时 <code>rebase</code> 会带来不想要的提交，或处理冲突时误操作执行了 <code>git rebase --skip</code> 。此时就想要回退到之前的提交，恢复自己的数据， <code>reflog</code> 就可以帮助你完成数据恢复。</p>
<h2 id="reflog">reflog</h2>
<p>当你工作时，=Git= 会在你每次修改了 <code>HEAD</code> 时悄悄地将改动记录下来。当你提交或修改分支时， <code>reflog</code> 就会更新。通过 <code>git reflog</code> 命令可以查看当前的状态：</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 20, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/bluetooth-faq/" class="link black dim">
        Bluetooth FAQ
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>收集遇到的 <code>bluetooth</code> 问题，使用的是 <code>deepin</code> 。</p>
<h2 id="控制中心不显示蓝牙模块">控制中心不显示蓝牙模块</h2>
<p>蓝牙模块不显示时，可以按照以下步骤来查找原因：</p>
<ol>
<li>执行 <code>sudo dmesg|grub bluetooth</code> 查看输出结果
<ul>
<li>
<p>输出里有 <code>timeout</code></p>
<p>此时再用 <code>systemctl status bluetooth.service</code> 看下服务有没有正常启动，错误信息是什么，然后根据错误去网上搜索答案。</p>
<p>如果蓝牙是由网卡提供的，此时可以试着开关一下网卡的硬件开关。因为内核在初始化网卡之前初始化蓝牙，就会导致蓝牙设备不可用，重新初始化一次就好了。
如果还是无效那就重启进入 <code>window</code> ，再 <code>window</code> 里开关一次蓝牙再重启到 <code>linux</code> 。</p>
</li>
<li>
<p>输出里无 <code>timeout</code></p>
<p>这就表明初始化没问题，继续下一步</p>
</li>
</ul>
</li>
</ol>
<hr>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 29, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/set-grup2-resolution/" class="link black dim">
        设置 Grub2 分辨率
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="背景">背景</h2>
<p>平时经常用显示器的分辨率去设置 <code>Grub</code> 的分辨率，虽然大部分都没有问题，但有时却没有用。所以就把 <code>Grub</code> 分辨率的设置方法详细说明一下，留档记录。</p>
<h2 id="查询支持的分辨率">查询支持的分辨率</h2>
<p>在设置 <code>Grub</code> 分辨率之前，需要先知道支持的分辨率列表，而幸运的是可以到 <code>Grub</code> 命令行查询。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 20, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/tcp-bbr/" class="link black dim">
        TCP BBR
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="启用-bbr">启用 BBR</h2>
<p><code>BBR</code> 是在 4.9 以后的内核才开始支持的, 可以试着执行 <code>sudo modprobe tcp_bbr</code> 来确定是否支持, 没有输出就意味着支持, 将下面两行内容添加到 <code>/etc/sysctl.conf</code> 文件里开启用它:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>net.core.default_qdisc <span style="color:#f92672">=</span> fq
</span></span><span style="display:flex;"><span>net.ipv4.tcp_congestion_control <span style="color:#f92672">=</span> bbr
</span></span></code></pre></div><p>使用 <code>sysctl net.ipv4.tcp_available_congestion_control</code> 查看支持的算法, 用 <code>sysctl net.ipv4.tcp_congestion_control</code> 查看当前使用的算法.</p>
<p>如果这个模块不会自动加载, 需要把 <code>tcp_bbr_powered</code> 添加到 <code>/etc/modules-load.d/modules.conf</code> 中.
另外测试发现, 有时 <code>sysctl.conf</code> 里的设置并不会应用, 需要手动执行一下, 因此便写了 <code>reload-sysctl.service</code> 来做这个, <code>systemctl enable</code> 这个服务后, 一切就 OK 了.</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 17, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/leanote-installation/" class="link black dim">
        Leanote Installation
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Leanote</code> 是一款开源的笔记软件, 支持使用 <code>markdown</code> 来编辑笔记, 并可选择是否将笔记导出成博客, 这对于知识整理及写博客都是非常方便的, 故来尝试下.</p>
<h2 id="安装">安装</h2>
<p><code>Leanote</code> 是使用 <code>Golang</code> 编写的, 可以直接使用官方编译好的可执行文件.
另外它使用的是 <code>mongodb</code> 数据库, 可以从源里安装, 也可以从官网下载.
以下的安装和配置都是基于最新的版本, 如果中途出错, 请看官方文档.</p>
<ul>
<li>
<p><code>Leanote</code> 下载地址: <a href="http://leanote.org/#download">见这里</a></p>
</li>
<li>
<p><code>mongodb</code> 下载地址: <a href="https://www.mongodb.com/download-center">见这里</a></p>
</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 27, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/openvpn-installation/" class="link black dim">
        OpenVPN Installation
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="安装所需软件">安装所需软件</h2>
<p>Arch: <code>yaourt -S openvpn easy-rsa</code></p>
<h2 id="生成证书">生成证书</h2>
<h3 id="server-端">Server 端</h3>
<ul>
<li>Copy template file</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo mkdir -p /etc/openvpn
</span></span><span style="display:flex;"><span>sudo cp -R /etc/easy-rsa /etc/openvpn
</span></span></code></pre></div><ul>
<li>Config vars</li>
</ul>
<p>取消并修改以下项:</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 14, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/mime-usage/" class="link black dim">
        MIME Usage
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="基本使用">基本使用</h2>
<p>使用到的工具为: <code>xdg-mime, gvfs-mime</code></p>
<ul>
<li>
<p>查询文件的类型</p>
<p>使用 <code>xdg-mime query filetype &lt;filepath&gt;</code> 可以得到文件的类型</p>
</li>
<li>
<p>查询默认程序</p>
<p>使用 <code>xdg-mime query default text/plain</code> 或 <code>gvfs-mime --query &lt;mimetype&gt;</code>, <code>gvfs-mime</code> 还会列出支持此 <code>mimetype</code> 的所有程序</p>
</li>
<li>
<p>设置默认程序</p>
<p>如将 <code>text/plain</code> 的默认打开程序设置为 <code>gvim.desktop</code>, 可以执行 <code>xdg-mime default gvim.desktop text/plain</code> 或 <code>gvfs-mime --set text/plain gvim.desktop</code></p>
</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 25, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/enable-coredump/" class="link black dim">
        Enable Coredump
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="简介">简介</h2>
<p>当一个程序崩溃时会产生一个 <code>core</code> 文件, 里面记录了这个程序崩溃的原因, 这些信息对于开发者是很有用的.</p>
<p>但是 <code>core dumps</code> 在大多数 <code>linux</code> 上是被禁用的, 下面就介绍下如何开启这个功能.</p>
<h2 id="开启">开启</h2>
<p>可以通过 <code>ulimit -c</code> 的输出知道此功能是否开启, 输出为 <code>0</code> 表示禁用, 否则为开启.</p>
<h3 id="临时开启">临时开启</h3>
<p>通过 <code>ulimit -c unlimited</code> 命令来开启 <code>coredump</code> 功能, 它会程序运行的当前目录生成一个 <code>core</code> 文件, 新的 <code>core</code> 会覆盖旧的.</p>
<p>通过可以修改 <code>/proc/sys/kernel/core_uses_pid</code> 文件内容为 <code>1</code> 来生成以 <code>pid</code> 作为扩展名的 <code>core</code> 文件.</p>
<p>通过修改 <code>/proc/sys/kernel/core_pattern</code> 可以修改 <code>core</code> 文件的保存位置和格式. 如把内容改为 <code>/tmp/core-%e-%p-%t</code>, 就表示把 <code>core</code> 文件保存到 <code>/tmp</code> 目录下, 文件名的格式为 <code>core-命令名-pid-时间戳</code> .</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 22, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/auto-hidden-cursor/" class="link black dim">
        Auto Hidden Cursor
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近需要做一个隐藏光标的功能, 在这里将了解到的知识总结一下.</p>
<h2 id="原理">原理</h2>
<p>隐藏光标的原理就是把光标设置为一个 <code>x11 null cursor</code>, 不需要隐藏时再将它设为 <code>x11 left_ptr cursor</code>.</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 4, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/build-vpn/" class="link black dim">
        在 VPS 中搭建 VPN 服务器
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近 <code>Google</code> 被封，而用 <code>Goagent</code> 做代理进行访问的效果而不是很理想，所以就想去买 <code>VPN/VPS</code> . 几经考虑后，就去买了个便宜 <code>VPS</code> , 这样也就可以分享给家人用了。</p>
<p><code>VPS</code> 中安装的是 <code>Ubuntu=，所以搭建 =VPN</code> 服务器也就是在 <code>Ubuntu</code> 上面搭建，具体方法如下。</p>
<p>注意：下面所有的操作都是以 <code>root</code> 用户进行的，非 <code>root</code> 用户请在命令前加上 <code>sudo</code></p>
<p><strong>安装 <code>pptp</code></strong></p>
<p><code>apt-get install pptpd</code></p>
<p>配置 <code>IP</code> 地址范围及服务器 <code>IP</code></p>
<p><code>vi /etc/pptpd.conf</code></p>
<p>取消下面内容的注释</p>
    </div>
  </div>

        
      
        <h2 class="f1">
          <a href="/categories/note" class="link blue hover-black">
            Category: note
          </a>
        </h2>
        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        三月 15, 2020
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/dde-daemon-tutorial/" class="link black dim">
        DDE 后端 Tutorial
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      dde 后端使用 go 作为主要的开发语言，使用 dbus 提供接口，主要使用 gsettings 来保存配置。所以在进行后端开发前需要对以上内容有基本的了解，这里假定本文档的阅读者熟悉 dbus 和 gsettings ，并有一定的开发经验。
这里就只对 go 进行简单的介绍。
go go 是一种类 c 的语言，但没有了 c 中令人头疼的指针和内存管理问题，极大的提高了开发效率。 go 中使用 package 来封装同一功能的模块，首字母大写的变量和函数是可以被其它 package 使用的。
学习 go 至少需要了解以下内容。
编码风格 go 提供了 gofmt 工具来对代码进行格式化，以使用统一的代码风格。因此在代码保存之前需要使用 gofmt 先进行格式化。
保存前格式化这种操作，一般可在编辑器中配置，如 vim , emacs 等，根据个人习惯选择编辑器。
变量 go 支持使用时声明和使用 var 声明两种方式，如下：
使用 var 声明 // 主动声明 var ( outData []byte err error ) outData, err = os.Exec(&#34;ls&#34;).Output() 使用时声明 // 使用时声明 outData, err := os.
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 28, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/learning_exercise/" class="link black dim">
        Learning Exercise
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      学习一种新语言，或者学习内核，可按照以下内容做题练习。
类型转换 number(int,float) to string string to number 大数相加(数的值接近类型最大值,相加后超过最大值) 字符串操作 split append string list join replace lowercase uppercase 常见数据结构 栈 创建及使用 链表 创建及使用 反序 环检查 两个链表是否相交 队列 创建及使用 字典 创建及使用 文件操作 文件读写 文件内容查找 获取整个文件内容(需要考虑大文件) 常用配置解析 json 读写 yaml 读写 ini 读写 时间 时间获取 时间戳获取及转换 定时器使用 自旋锁 会一直自旋直到获取到锁，期间不会陷入 sleep
互斥锁 获取不到锁时会陷入 sleep
多进程 进程创建 进程同步 进程间共享 多线程 线程创建 线程间交互 线程同步 
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 28, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/debian-cve-tracker/" class="link black dim">
        Debian CVE Tracker
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><a href="https://security-tracker.debian.org/tracker/status/release/stable">Debian CVE Tracker</a> 上记录了很多安全漏洞，有些 <code>Debian</code> 会在当前版本修复，但有些不会。由于 <code>deepin</code> 会在当前版本上停留很久，所以需要修复这些安全漏洞。这就需要自行追踪 <code>CVE Bug</code> 的状态和添加 <code>patch</code> ，因此写了个程序 <a href="https://github.com/deepin-cve/tracker">deepin-cve-tracker</a> 来管理。</p>
<p>本文将介绍 <code>deepin-cve-tracker</code> 的使用方法和 <code>patch</code> 的添加方法。</p>
<h2 id="deepin-cve-tracker">Deepin CVE Tracker</h2>
<p><code>deepin-cve-tracker</code> 设计用来追踪 <code>Debain CVE Bug</code> ，会先将 <code>Debian</code> 中的数据爬入自己的数据库中，然后做标记来追踪 <code>bug</code> 的处理状态。提供 <code>HTTP</code> 接口供用户使用，使用 <code>docker</code> 部署。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        五月 2, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/installation/" class="link black dim">
        系统安装二三事
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在重装系统时, 需要考虑软件与数据的备份恢复, 遂记录下需要用到的软件, 自定义的配置和数据恢复.</p>
<h2 id="软件">软件</h2>
<h3 id="换源">换源</h3>
<ul>
<li><code>Archlinux</code></li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 2, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/python-learn-note/" class="link black dim">
        python3 学习笔记
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="python3-study-notes">Python3 Study Notes</h2>
<p>本人很少写 <code>python</code> 代码, 一般都是用 <code>go</code> 的, 去年时用 <code>python</code> 写过一些收集系统信息的工具, 当时是边看手册边写的. 如今又要用 <code>python</code> 来写一个生成 <code>xlsx</code> 的工具, 就又需要查看手册了, 至于为什么不用 <code>go</code> 写? 那是因为 <code>go</code> 的库不兼容永中. 在这里不得不说, 虽然 <code>go</code> 很火, 但是一些库还是不如 <code>python</code> 多, 不如 <code>python</code> 兼容性好.</p>
<p>为了避免以后再出这种事情, 这次就好好的了解下 <code>python</code>, 将它的用法按照自己对语言的理解分块记录下来. 要使用某种语言, 个人认为需要了解这些方面:</p>
<ul>
<li>编码风格</li>
<li>变量的类型, 声明及使用方式</li>
<li>输入/输出</li>
<li>控制语句的写法</li>
<li>错误处理的用法</li>
<li>函数的用法, 还有语言支持的一些特性, <code>python</code> 中就有装饰器, <code>lambda</code> 语句等</li>
<li>对于面向对象语言还需要了解类的声明, 继承, 多态等的用法</li>
</ul>
<p>还有一些就是此语言的一些特性, <code>python</code> 就还需要了解以下特性:</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 27, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/go-package-management/" class="link black dim">
        Go 包管理之gom
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="go-module-使用">Go Module 使用</h2>
<p><code>Go Module</code> 是官方用来管理 <code>package</code> 依赖的工具, <code>1.11</code> 新加的, 使用时需要设置变量: <code>GO111MODULE=on</code> .</p>
<p><code>go mod help</code> 可以查看其帮助文档:</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 13, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-signal-example/" class="link black dim">
        Linux Signal Examples
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>信号是系统响应某些条件而产生的一个事件，接收到该信的进程做出相应的处理。通常信是由错误产生的，如段错误(<code>SIGSEGV</code>)。 但信还可以作为进程间通信的一种方式，由一个进程发送给另一个进程。</p>
<p>信号定义在 <code>signal.h</code> 文件中，以 <code>SIG</code> 作为开头，可用 <code>kill -l</code> 命令查看，详细信息参见 <a href="http://man7.org/linux/man-pages/man7/signal.7.html">man 7 signal</a> 。</p>
<h2 id="信号处理">信号处理</h2>
<p>信号可以通过 <code>signal</code> 和 <code>sigaction</code> 函数来注册处理， <code>signal</code> 函数是 <code>struct sigaction</code> 中 <code>sa_handler</code> 的一种便捷实现。</p>
<h3 id="signal-函数"><code>signal</code> 函数</h3>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 8, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/cups-notes/" class="link black dim">
        CUPS 资料
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="installation">Installation</h2>
<p><code>sudo apt install cups ghostscript gsfonts</code></p>
<h2 id="driver">Driver</h2>
<ul>
<li>
<p>gutenprint</p>
<p>一组质量非常好的驱动集合，支持的目标机型包括 <code>Canon, Epson, Lexmark, Sony, Olympus</code> ；以及配合 <code>CUPS/GhostSscript/Foomatic/GIMP</code> 使用的 <code>PCL printers</code> 。</p>
<p>安装包: <code>cups-driver-gutenprint gimp-gutenprint ijsgutenprint printer-driver-gutenprint</code></p>
</li>
<li>
<p>foomatic</p>
<p><code>Foomatic</code> 是一个基于数据库的，集成自由软件打印机驱动和脱机打印程序的系统。</p>
<p>安装包: <code>foomatic-db foomatic-db-engine foomatic-db-compressed-ppds foomatic-db-gutenprint foomatic-filters</code> 以及 <code>foomatic-db-nonfree</code></p>
</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        六月 6, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/xrandr-examples/" class="link black dim">
        XRandr Examples
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>由于经常会用到使用 <code>xrandr</code> 设置屏幕属性, 而每次用的时候都要去查 <code>man</code> 手册, 有时还需要上网搜索例子.
这样一来就比较麻烦, 所以就想整理下 <code>xrandr</code> 的用法, 给出一些常用的例子.</p>
<h2 id="查询">查询</h2>
<p>使用 <code>xrandr -q</code> 命令可以查询当前的显示器状态, 使用 <code>xrandr --verbose</code> 将会显示更详细的信息.</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        二月 3, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/debug-summary/" class="link black dim">
        Debug 小结
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>调试 <code>bug</code> 的时候要有耐心, 要不断测试, 直到找到问题原因.</p>
<h2 id="基本思路">基本思路</h2>
<h3 id="确定-bug-出现的方式">确定 <code>bug</code> 出现的方式</h3>
<ul>
<li>一定要找到稳定重现的方式, 这样才能方便下面的调试</li>
<li>如果找不到稳定重现的方法就只能根据上次出现的情形, 去查看相关的代码, 猜测可能出问题的地方, 然后针对那一块进行调试, 直到找到稳定重现方式</li>
</ul>
<h3 id="定位出问题的代码">定位出问题的代码</h3>
<ul>
<li>再找到稳定重现方式后, 开始定位出问题的函数, 然后加入调试信息, 不断尝试, 直到找到有问题的代码</li>
<li>找到有问题的代码后, 如果发现是第三方库里的函数,可以打印出每次调用的输入输出参数, 看看是否有迹可循, 可以单独写个小程序, 传入问题的参数, 进行不断测试, 来确定第三方库有没有问题</li>
<li>如果自己程序的代码, 就一行一行的慢慢测试, 确定问题的原因, 原因找到了就可以开始思考解决方法了</li>
</ul>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        二月 3, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/xsetwacom-options/" class="link black dim">
        xsetwacom 选项说明
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>xsetwacom</code> 是一个设置数位板的命令行工具, 在 <code>Debian/Ubuntu/deepin</code> 上可以通过安装 <code>xserver-xorg-input-wacom</code> 来获取它.</p>
<p>可以通过 <code>man xsetwacom</code> 看到它的帮助文档, 下面就简单说明下它的部份选项:</p>
<hr>
<h2 id="options">Options</h2>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 20, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/go-tcp-socket-example/" class="link black dim">
        Go 笔记: 简单的 TCP Socket 示例
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>一个简单的 <code>TCP Socket</code> 的示例，使用 <code>gob</code> 处理传输的数据。</p>
<h2 id="server-dot-go"><code>server.go</code></h2>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 7, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/go-gob-rw-file/" class="link black dim">
        Go 笔记: Gob Write/Read File
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Gob</code> 使用实例，将结构体写入文件里，在需要的时候再从文件中读取出来。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 5, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/chroot-shell/" class="link black dim">
        chroot 脚本
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近测试了以下 <code>chroot</code> ，然后把步骤写成了下面两个脚本，方便以后使用。</p>
<p><strong>使用时需要确定每条命令都执行成功了</strong></p>
<p><code>Arch</code> 分区结构</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>/dev/sda5	/
</span></span><span style="display:flex;"><span>/dev/sda1	/boot
</span></span><span style="display:flex;"><span>/dev/sda6	/home
</span></span><span style="display:flex;"><span>/dev/sda8	Swap
</span></span></code></pre></div>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        六月 22, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/go-md5-sum/" class="link black dim">
        Go 笔记: md5 sum
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>使用 Go 语言实现字符串与文件的 MD5 值计算，但是大文件不要使用此方法。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        六月 20, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/go-file-exist/" class="link black dim">
        Go 笔记: 判断文件是否存在
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>使用 GoLang 判断文件是否存在。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#f92672">package</span> <span style="color:#a6e22e">utils</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> (
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;os&#34;</span>
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">func</span> <span style="color:#a6e22e">isFileExist</span>(<span style="color:#a6e22e">filename</span> <span style="color:#66d9ef">string</span>) <span style="color:#66d9ef">bool</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> len(<span style="color:#a6e22e">filename</span>) &lt; <span style="color:#ae81ff">1</span> {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">_</span>, <span style="color:#a6e22e">err</span> <span style="color:#f92672">:=</span> <span style="color:#a6e22e">os</span>.<span style="color:#a6e22e">Stat</span>(<span style="color:#a6e22e">filename</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">err</span> <span style="color:#f92672">==</span> <span style="color:#66d9ef">nil</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">os</span>.<span style="color:#a6e22e">IsExist</span>(<span style="color:#a6e22e">err</span>)
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        六月 20, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/go-uri-encode/" class="link black dim">
        Go 笔记: URI Encode/Decode
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近在处理路径时，要求统一用 <code>URI</code> (通用资源标识符) 的格式来表示。偶尔会遇到 URI 被编码的情况，这就需要解码了，故在此把 <code>Encode/Decode URI</code> 的方法记录在此，以备后用。</p>
    </div>
  </div>

        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 18, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/xrecord-example/" class="link black dim">
        XRecord 示例
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近在做快捷键绑定的项目，但在绑定单按键时发现 <code>XGrabKey</code> 无法处理。遂请教组长，得知 <code>XRecord</code> 可以处理，于是就去查找 <code>XRecord</code> 的相关资料，但却很少。
所以在此记录一下整理的示例代码，以便日后查看，其功能在代码注释中写出。</p>
    </div>
  </div>

        
      
        <h2 class="f1">
          <a href="/categories/security" class="link blue hover-black">
            Category: security
          </a>
        </h2>
        
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        二月 7, 2023
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/trenchboot_intro/" class="link black dim">
        TrenchBoot Intro
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>TrenchBoot 是一个框架，用于让设备管理者选择适合其目标机器环境的安全引擎。目的是为了提升运行环境中固件及软件的安全性，通过测量启动环境来实现，如 DRTM 技术。</p>
<p>TrenchBoot 框架将启动流程分为三个阶段，分别是：</p>
<ul>
<li>
<p>引导阶段(Bootstrap)</p>
<p>Bootstrap 阶段主要是对现已存在的引导技术，包括 UEFI、grub、shim 等，添加完整性功能。这是 TrenchBoot 的主要关注点，称之为 BIT(Boot Integrity Technology) 。</p>
</li>
<li>
<p>中间阶段(Intermediate)</p>
<p>Intermediate 阶段是 TrenchBoot 抽象出的，用来执行 TrenchBoot Loader ，以此实现系统启动的完整性。</p>
<p>TrenchBoot Loader 阶段将执行 TrenchBoot 安全引擎，通过 Dynamic Launch CPU 指令进入安全运行环境，然后对前一段阶段收集的 evidence 进行测试，并构建 DRTM(Dynamic Root of Trusted for Measurement) 。</p>
</li>
<li>
<p>运行阶段(Runtime)</p>
<p>Runtime 阶段根据测量结果和安全策略决定如何启动目标及赋予权限，目标包括管理程序、操作系统等。</p>
</li>
</ul>
    </div>
  </div>

        
      
    </section>
  </div>

    </main>
    <footer class="bg-black bottom-0 w-100 pa3" role="contentinfo">
  <div class="flex justify-between">
  <a class="f4 fw4 hover-white no-underline white-70 dn dib-ns pv2 ph3" href="https://jouyouyun.github.io" >
    &copy;  jouyouyun 2023 
  </a>
    <div>
<div class="ananke-socials">
  
    <a href="https://github.com/jouyouyun" target="_blank" class="github ananke-social-link link-transition stackoverflow link dib z-999 pt3 pt0-l mr1" title="GitHub link" rel="noopener" aria-label="follow on GitHub——Opens in a new window">
      
        <span class="icon"><svg style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>
</span>
      
<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;"/>
</svg>
</span></a>
  
</div>
</div>
  </div>
</footer>

  </body>
</html>
